/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg1ifxServidorTcp;
import BioHuella.BioHuella;
import BioRostro.BioRostro;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketTimeoutException;
import pkg1ifxArchivos.cIfxProtocolo;
import pkg1ifxArchivos.cifxLogs;
import pkg1ifxArchivos.caDatosTemplate;
import pkgIfx_Conexiones.cIfxBD_Servidor;


/**
 *
 * @author strailaparicio
 */
public class caClientesCon extends cIfxClientesCon{
    
    private caDatosTemplate odatostemplate = new caDatosTemplate();
    private caServidor caservidor=null;
    private cifxLogs Log;
    cIfxBD_Servidor BD_Servidor;
    BioHuella huella;
    BioRostro rostro;
    //Strail
    //Para los appbots se deben usar los rangos
    private int ninicioHuella=0;
    private int nfinalHuella =-1;
    public void setRangoHuella(int minicio, int mfinal)
    {
        ninicioHuella=minicio;
        nfinalHuella=mfinal;
    }

    //Strail 01feb2012
    //Se dividen los rangos para huella y rostro respectivamente

    private int ninicioRostro=0;
    private int nfinalRostro =-1;
    public void setRangoRostro(int minicio, int mfinal)
    {
        ninicioRostro=minicio;
        nfinalRostro=mfinal;
    }
    public caClientesCon(Socket socket,caServidor servirdor,cifxLogs log,BioHuella Huella,BioRostro Rostro)
    {
        super(socket, servirdor, log);
        caservidor=servirdor;
        Log = log;
        huella = Huella;
        rostro = Rostro;
        BD_Servidor =  new cIfxBD_Servidor(Log);
    }
    
    
    @Override
    public void run()
    {
        runNEW();

    }
    
    private synchronized void runNEW()
    {
        try {
                //Variable para controlar que acaba de salir de un IFX-Put
                // "+sdireccionipagenete+"
                boolean bSalirNo=false;
                //Activo los flujos para entrada salida de datos
                PrintWriter out = new PrintWriter(puerto.getOutputStream(), true);
                BufferedReader in = new BufferedReader(
                                        new InputStreamReader(puerto.getInputStream()));
                //Variables para el manejo de de los mensajes de entrada salida
                sdireccionipagenete=puerto.getInetAddress().toString();
                olog.outMensaje("caClientesCon: Entrando conexion con IP:"+sdireccionipagenete);

                String inputLine, outputLine;
                cIfxProtocolo kkp = new cIfxProtocolo();
                outputLine = kkp.procesarES("IFX-Saludo");
                out.println(outputLine);

                while (true) {

                    if(scadenaperdida.length()>0)
                    {
                       inputLine=scadenaperdida;
                       scadenaperdida="";
                    }
                    else
                    {
                        inputLine = in.readLine();
                        if(inputLine == null)
                            break;
                    }


                    olog.outMensaje("caClientesCon.run(): "+sdireccionipagenete+" Entrando Comando: "+inputLine);
                    outputLine = kkp.procesarES(inputLine);

                    if(outputLine.equals("IFX-DatosAgente"))
                    {
                        //puerto.
                        snombreagente=kkp.getNombreAgente();
                        //Strail solo para la consola ofrmgral.setAgenteNuevoEnLista(kkp.getNombreAgente()+" | " +sdireccionipagenete);

                    }
                    else if(outputLine.equals("IFX-Servidor"))
                    {
                        sultimomsj="IFX-Servidor";

                    }
                    else if(outputLine.equals("IFX-Cmd"))
                    {
                        sultimomsj=kkp.getUltimoMsj();
                        cifxCmd ocmd = new cifxCmd(sultimomsj);
                        ocmd.start();

                        while(!ocmd.HayResultados())
                            System.out.print("");

                        outputLine=ocmd.getResultados()+ "IFX-Cmd ("+ocmd.getNomFileResult()+")";
                        //outputLine+="\n";

                    }
                    else if(outputLine.equals("IFX-Msj"))
                    {
                        //cIfxDatosMSJ omsj=new cIfxDatosMSJ();
                        //kkp.getUltimoMsj().
                        sultimomsj=kkp.getUltimoMsj();
                        omsj.convCadEnMsj(sultimomsj);
                        //if(trabajarconconsola)
                        //    setMsjAgente(omsj);

                    }

                    else if(outputLine.equals("IFX-Mensaje"))
                    {
                        sultimomsj=kkp.getUltimoMsj();
                        //ofrmgral.setMsjConsola(kkp.getUltimoMsj());

                    }
                    else if(outputLine.equals("IFX-Put"))
                    {
                        //IFX-Put nombre archivo|tamaño|path destino
                        sultimomsj=kkp.getUltimoMsj();
                        odarchivo.ConvCad(sultimomsj);
                        //Hago el cambio de funciones para la prueba
                        //leerGuardarBytes();
                        leer_BytesGuardar();

                         olog.outMensaje("caClientesCon.run(): "+sdireccionipagenete+"Se ha terminado de leer archivo");

                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;
                       

                    }
                                       
                    //FENIX-Biometricos
                                        
                    else if(outputLine.equals("botFENIX-Identificar"))
                    {
                        //FENIX-Identificar TIPO BIOMETRIA|tamaño|1024
                        olog.outMensaje("caClientesCon.run(): Atendiendo Solicitud de (AppBot)IDENTIFICACION por:"+sdireccionipagenete);
                        sultimomsj=kkp.getUltimoMsj();
                        odatostemplate.ConvCad(sultimomsj);
                        //
                        identificarFENIXbots();
                        //
                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;
                       

                    }                   
                    else if(outputLine.equals("botFENIX-Verificar"))
                    {
                        //FENIX-Identificar TIPO BIOMETRIA|tamaño|1024
                        olog.outMensaje("caClientesCon.run(): Atendiendo Solicitud de (AppBot)VERIFICACION por:"+sdireccionipagenete);
                        sultimomsj=kkp.getUltimoMsj();
                        odatostemplate.ConvCad(sultimomsj);
                        //
                        verificarFENIXbots();
                        //
                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;
                       

                    }

                    else if(outputLine.equals("botFENIX-Insertar"))
                    {
                        //botFENIX-Insertar TIPO BIOMETRIA|tamaño|1024|cedula
                        olog.outMensaje("caClientesCon.run(): Atendiendo Solicitud de (AppBot)INSERTAR por:"+sdireccionipagenete);
                        sultimomsj=kkp.getUltimoMsj();
                        odatostemplate.ConvCad(sultimomsj);
                        //
                        insertarFENIXbots();
                        //
                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;


                    }
                    else if(outputLine.equals("FENIX-Identificar"))
                    {
                        //FENIX-Identificar TIPO BIOMETRIA|tamaño|1024
                        olog.outMensaje("caClientesCon.run(): Atendiendo Solicitud de IDENTIFICACION por:"+sdireccionipagenete);
                        sultimomsj=kkp.getUltimoMsj();
                        odatostemplate.ConvCad(sultimomsj);
                        //
                        identificarFENIX();
                        //
                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;
                       

                    }                   
                    else if(outputLine.equals("FENIX-Verificar"))
                    {
                        //FENIX-Verificar TIPO BIOMETRIA|tamaño|1024
                        olog.outMensaje("caClientesCon.run(): Atendiendo Solicitud de VERIFICACION por:"+sdireccionipagenete);
                        sultimomsj=kkp.getUltimoMsj();
                        odatostemplate.ConvCad(sultimomsj);
                        verificarFENIX();
                   
                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;
                       

                    }

                    else if(outputLine.equals("FENIX-Insertar"))
                    {
                        //FENIX-INSERTAR TIPO BIOMETRIA|tamaño|1024
                        olog.outMensaje("caClientesCon.run(): Atendiendo Solicitud de INSERTAR por:"+sdireccionipagenete);
                        sultimomsj=kkp.getUltimoMsj();
                        odatostemplate.ConvCad(sultimomsj);
                        insertarFENIX();

                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;


                    }
                    else if(outputLine.equals("IFX-Get"))
                    {
                        //IFX-Get nombre archivo
                        sultimomsj=kkp.getUltimoMsj();

                        leerEnviarBytes(sultimomsj.trim(),getPuerto());

                        olog.outMensaje("caClientesCon.run(): "+sdireccionipagenete+"Se ha terminado de enviar archivo");
                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;
                        
                    }
                    else if(outputLine.equals("IFX-putASCII"))
                    {
                        //IFX-Put nombre archivo|tamaño|path destino
                        sultimomsj=kkp.getUltimoMsj();
                        odarchivo.ConvCad(sultimomsj);
                        //Hago el cambio de funciones para la prueba
                        //leerGuardarBytes();
                        //Strail 08/08/2011 Comentario a la funcion de los ascii
                        //leer_BytesGuardarASCII();
                        //leer_BytesGuardarBlancoASCII();
                        leer_putASCII();

                         olog.outMensaje("caClientesCon.run(): "+sdireccionipagenete+"Se ha terminado de leer archivo");

                        outputLine="";
                        //Probando a desconectar para evitar problemas
                        break;

                    }                        
                    else if(outputLine.equals("IFX-Desconectando ..."))
                    {
                        out.println(outputLine);
                        //olog.outMensaje("cIfxClientesCon: Desconectando IP:"+sdireccionipagenete);
                        outputLine="";
                        break;

                    }
                    else if(outputLine.equals("IFX-InfFile"))
                    {
                        sultimomsj=kkp.getUltimoMsj().trim();
                        
                        File forigen = new File(sultimomsj);
                        if(forigen.exists())
                        {
                            outputLine=String.valueOf(forigen.length());
                        }
                        else
                           outputLine="0"; 
                        //out.println(outputLine);
                        //olog.outMensaje("cIfxClientesCon: Desconectando IP:"+sdireccionipagenete);
                        //break;

                    }
                    //STR-Esta sentencia envia datos al cliente
                    olog.outMensaje("caClientesCon.run(): "+sdireccionipagenete+" Enviandole Respuesta:"+outputLine);
                    if(outputLine.length()>0)
                    {
                        
                        out.println(outputLine);
                        out.flush();
                        break;
                    }


                    out.flush();

                }
                out.close();
                in.close();
                puerto.close();
                olog.outMensaje("caClientesCon: Desconectando IP:"+sdireccionipagenete);
                oservirdor.QuieroSalir(nllave);

	}catch(SocketTimeoutException tex)
        {
            olog.outMensaje("caClientesCon.run(): Time out :"+tex.getMessage());
            olog.outMensaje("caClientesCon: Desconectando IP:"+sdireccionipagenete);
            oservirdor.QuieroSalir(nllave);
        }
        catch (IOException e) {
	    olog.outMensaje("caClientesCon.run(): "+sdireccionipagenete+" ERROR:"+e.getMessage());
            oservirdor.QuieroSalir(nllave);
	}
    }
    
    //FENIX
    
    protected synchronized void identificarFENIXbots() 
    {
                
        //Strail 23dic2011
        try {
            String resultado = null;
            if(solicitudesrespuestasFENIX("identificarFENIXbots","botFENIX-Identificar")>0)
            {
                //Strail 17ene2012
                //if(odatostemplate.getTipo().equals(" HUELLA")){
                if(odatostemplate.getTipo().contains("HUELLA")){
                    try{
                        System.out.println("caClientesCon.identificarFENIXbots(): Identificando Huella ");
                        resultado = huella.leerTempIdentificar(odatostemplate.getTemplate()[0].getTemplate());
                        olog.outMensaje("caClientesCon.identificarFENIXbots(): Termino la Identificación de Huella ");
                        olog.outMensaje("caClientesCon.identificarFENIXbots(): Encontrado : "+resultado);
                    }catch(Exception e){
                         olog.outMensaje("caClientesCon.identificarFENIXbots(): ERROR HUELLA :"+e.getMessage());
                    }
                //Strail 17ene2012
                //}else if(odatostemplate.getTipo().equals(" ROSTRO")){
                }else if(odatostemplate.getTipo().contains("ROSTRO")){
                    try{
                        System.out.println("caClientesCon.identificarFENIXbots(): Identificando Rostro ");
                        resultado = rostro.leerTempIdentificar(odatostemplate.getTemplate()[0].getTemplate());
                        olog.outMensaje("caClientesCon.identificarFENIXbots(): Termino la Identificación de Rostro ");
                        olog.outMensaje("caClientesCon.identificarFENIXbots(): Encontrado : "+resultado);
                    }catch(Exception e){
                         olog.outMensaje("caClientesCon.identificarFENIXbots(): ERROR ROSTRO :"+e.getMessage());
                    }
                }

                //lout.println("FENIX-Identificar RESPUESTA|1000029292|1299292012|292920293");
                //Para el caso de las respuestas fallidas deberia ser -1|-1
                if(!resultado.contains("|"))
                    resultado = "-1|-1";
                String scadenaenvio="botFENIX-Identificar RESPUESTA|"+resultado;//odatostemplate.aCadena();
                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
                lout.println(scadenaenvio);
            }  
        }
        catch(Exception exx){
           olog.outMensaje("caClientesCon.identificarFENIXbots(): ERROR:"+exx.getMessage());

        }
        return;
        //

    }
    /**
     *
     */
    protected synchronized void insertarFENIXbots() 
    {   //Strail 23dic2011
        try {
            String scadenaenvio="botFENIX-Insertar RESPUESTA|-1|-1|"+odatostemplate.aCadena();
            if(solicitudesrespuestasFENIX("insertarFENIXbots","botFENIX-Insertar")>0)
            {
                //Strail 17ene2012
                //if(odatostemplate.getTipo().equals(" HUELLA")){
                if(odatostemplate.getTipo().contains("HUELLA")){
                    try{
                        //caservidor.getHuella().inserttemplateHuella(odatostemplate.getCedulas()[0], odatostemplate.getTemplate());
                        System.out.println("Insertando Huella ");
                        System.out.println("Tamaños "+odatostemplate.getTemplate()[0].tamano);
                        System.out.println("Tamaños "+odatostemplate.getTemplate()[1].tamano);
                        System.out.println("Tamaños "+odatostemplate.getTemplate()[2].tamano);
                        System.out.println("Tamaños "+odatostemplate.getTemplate()[3].tamano);
                        BD_Servidor.almacenar_Huella(odatostemplate);
                        huella.actualizaArrayList(odatostemplate);
                        System.out.println("Termino de insertarlos en la BD ");
                        scadenaenvio="botFENIX-Insertar RESPUESTA|1|"+odatostemplate.getCedulas()[0];
                    }catch(Exception e){
                         olog.outMensaje("INS - caClientesCon.insertarFENIXbots(): ERROR HUELLA :"+e.getMessage());
                    }
                }else if(odatostemplate.getTipo().contains("ROSTRO")){//Strail 17ene2012
                    try{
                        //caservidor.getHuella().inserttemplateHuella(odatostemplate.getCedulas()[0], odatostemplate.getTemplate());
                        System.out.println("Insertando Rostro ");
                        System.out.println("Tamaños "+odatostemplate.getTemplate()[0].tamano);
                        BD_Servidor.almacenar_Rostro(odatostemplate);
                        rostro.actualizaArrayList(odatostemplate);
                        System.out.println("Termino de insertarlos en la BD ");
                        scadenaenvio="botFENIX-Insertar RESPUESTA|1|"+odatostemplate.getCedulas()[0];
                    }catch(Exception e){
                         olog.outMensaje("INS - caClientesCon.insertarFENIXbots(): ERROR ROSTRO :"+e.getMessage());
                    }
                }
                
                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
                lout.println(scadenaenvio);
            }
                
        }
        catch(Exception exx)
        {
           olog.outMensaje("caClientesCon.insertarFENIXbots(): ERROR:"+exx.getMessage()); 
        }
        return;
        

    }
    protected synchronized void verificarFENIXbots()
    {
                
        //Strail 23dic2011
        try {

            String resultado = null;
            if(solicitudesrespuestasFENIX("verificarFENIXbots","botFENIX-Verificar")>0)
            {
                if(odatostemplate.getTipo().contains("HUELLA")){
                    try{
                        System.out.println("caClientesCon.verificarFENIXbots(): Verificando Huella ");
                        resultado = huella.leerTempVerificar(odatostemplate.getTemplate()[0].getTemplate(),odatostemplate.getCedulas()[0]);
                        olog.outMensaje("caClientesCon.verificarFENIXbots(): Termino la Verificacion de Huella ");
                        olog.outMensaje("caClientesCon.verificarFENIXbots(): Encontrado : "+resultado);
                    }catch(Exception e){
                         olog.outMensaje("caClientesCon.verificarFENIXbots(): ERROR HUELLA :"+e.getMessage());
                    }
                //Strail 17ene2012
                //}else if(odatostemplate.getTipo().equals(" ROSTRO")){
                }else if(odatostemplate.getTipo().contains("ROSTRO")){
                    try{
                        System.out.println("caClientesCon.verificarFENIXbots(): Verificando Rostro ");
                        resultado = rostro.leerTempIdentificar(odatostemplate.getTemplate()[0].getTemplate());
                        olog.outMensaje("caClientesCon.verificarFENIXbots(): Termino la Verificacion de Rostro ");
                        olog.outMensaje("caClientesCon.verificarFENIXbots(): Encontrado : "+resultado);
                    }catch(Exception e){
                         olog.outMensaje("caClientesCon.verificarFENIXbots(): ERROR ROSTRO :"+e.getMessage());
                    }
                }

                if(!resultado.contains("|"))
                    resultado = "-1|-1";
                String scadenaenvio="botFENIX-Verificar RESPUESTA|"+resultado;
                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
                lout.println(scadenaenvio);
            }
                
        }
        catch(Exception exx)
        {
           olog.outMensaje("caClientesCon.verificarFENIXbots(): ERROR:"+exx.getMessage()); 
        }
        return;
        

    }
    
    protected synchronized int solicitudesrespuestasFENIX(String sfuncion,String protoculo)
    {
        InputStream sis;
        int nrespuesta = -1;//-1 Error inesperado, 0 error, 1 OK
        //String stmp="";
        try {
                sis = puerto.getInputStream();
                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);

                //Ejecuto la lectura de varios templates dependiendo del numero
                for(int i=0;i<odatostemplate.getNumTemplates();i++)
                {
                        //byte[] buffer=new byte[ntamanoenvio];
                        int nread=0;
                        long ntotalleido=0;
                
                        if(odatostemplate.getTamano(i)>0)
                        {
                            byte[] buffer=new byte[ntamanoenvio];
                            
                            lout.println(protoculo+" OK");
                            lout.flush();

                            olog.outMensaje("caClientesCon."+sfuncion+" "+sdireccionipagenete+" Leyendo Template->");
//                            if((nread = sis.read(buffer))>0)        
//                            {
//                                byte[] btmp = new byte[nread];
//                                System.arraycopy(buffer, 0, btmp, 0, btmp.length);
//                                odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
//                                lout.println(protoculo+" TRANSMISIONok");
//                                    
//                            
//                            }
                            

                            while(((nread = sis.read(buffer))>0))
                            {

                                ntotalleido+=nread;
                                if(ntotalleido>odatostemplate.getTamano(i))
                                {
                                    nread=nread-(int)(ntotalleido-odatostemplate.getTamano(i));
                                    ntotalleido=odatostemplate.getTamano(i);
                                    
                                    byte[] btmp = new byte[nread];
                                    System.arraycopy(buffer, 0, btmp, 0, btmp.length);
                                    odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
                                    //odatostemplate.getTemplate()[i].agregaDatosTemplate(buffer);
                                    //fout.write(buffer,0,nread);
                                    //scadenaperdida=stmp.substring(nread+1);
                                    //fout.flush();
                                    lout.println(protoculo+" TRANSMISIONok");

                                    break;
                                }
                                else if(ntotalleido==odatostemplate.getTamano(i))
                                {
                                    byte[] btmp = new byte[nread];
                                    System.arraycopy(buffer, 0, btmp, 0, btmp.length);
                                    odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
                                    lout.println(protoculo+" TRANSMISIONok");
                                    break;
                                }
                                else
                                {
                                    //stmp=new String(buffer,"UTF8");
                                    //fout.write(buffer,0,nread);
                                    byte[] btmp = new byte[nread];
                                    System.arraycopy(buffer, 0, btmp, 0, btmp.length);
                                    odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
                                }
                                //Limpiando Buffer de datos para dejar en vacio.
                                buffer=new byte[ntamanoenvio];


                            }
                            lout.flush();
                            //fout.flush();

                            olog.outMensaje("caClientesCon."+sfuncion+" "+sdireccionipagenete+" FENIX Template TAMANO TOTAL LEIDO ->"+ntotalleido);
                            olog.outMensaje("caClientesCon."+sfuncion+" "+sdireccionipagenete+" FENIX Template TAMANO TOTAL ESPERADO ->"+odatostemplate.getTamano(i));


                        }
                        
                    }//Cierra el for

                nrespuesta=1;
 
                
        } 
        catch(Exception ex)
        {
           olog.outMensaje("caClientesCon."+sfuncion+"(): ERROR:"+ex.getMessage()); 
           nrespuesta=-1;
        }
        return nrespuesta;
    }
    
    protected synchronized void identificarFENIX() 
    {
        //Strail 23dic2011
        try {
            
            if(solicitudesrespuestasFENIX("identificarFENIX","FENIX-Identificar")>0)
            {

                String[] ssRespuesta= caservidor.getAppsBots().ejecutaIDENTIFICACION(odatostemplate);
                String scadenaenvio= "FENIX-Identificar RESPUESTA";


                for(int x =0; x<ssRespuesta.length; x++)
                {
                    scadenaenvio+=ssRespuesta[x];

                }

                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
                lout.println(scadenaenvio);
            }
                
        }
        catch(Exception exx)
        {
           olog.outMensaje("caClientesCon.identificarFENIX(): ERROR:"+exx.getMessage()); 
        }
        return;
        //
        
//        InputStream sis;
//        //String stmp="";
//        try {
//            
//                
//            
//                sis = puerto.getInputStream();
//                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
//
//                //Ejecuto la lectura de varios templates dependiendo del numero
//                for(int i=0;i<odatostemplate.getNumTemplates();i++)
//                {
//                        byte[] buffer=new byte[ntamanoenvio];
//                        int nread=0;
//                        long ntotalleido=0;
//                
//                        if(odatostemplate.getTamano(i)>0)
//                        {
//                            lout.println("FENIX-Identificar OK");
//                            lout.flush();
//
//                            olog.outMensaje("caClientesCon.identificarFENIX:"+sdireccionipagenete+" Leyendo Template->");
//
//                            while(((nread = sis.read(buffer))>0))
//                            {
//
//                                ntotalleido+=nread;
//                                if(ntotalleido>odatostemplate.getTamano(i))
//                                {
//                                    nread=nread-(int)(ntotalleido-odatostemplate.getTamano(i));
//                                    
//                                    byte[] btmp = new byte[nread];
//                                    System.arraycopy(buffer, 0, btmp, 0, btmp.length);
//                                    odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
//                                    //odatostemplate.getTemplate()[i].agregaDatosTemplate(buffer);
//                                    //fout.write(buffer,0,nread);
//                                    //scadenaperdida=stmp.substring(nread+1);
//                                    //fout.flush();
//                                    lout.println("FENIX-Identificar TRANSMISIONok");
//
//                                    break;
//                                }
//                                else if(ntotalleido==odatostemplate.getTamano(i))
//                                {
//                                    byte[] btmp = new byte[nread];
//                                    System.arraycopy(buffer, 0, btmp, 0, btmp.length);
//                                    odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
//                                    lout.println("FENIX-Identificar TRANSMISIONok");
//                                    break;
//                                }
//                                else
//                                {
//                                    //stmp=new String(buffer,"UTF8");
//                                    //fout.write(buffer,0,nread);
//                                    byte[] btmp = new byte[nread];
//                                    System.arraycopy(buffer, 0, btmp, 0, btmp.length);
//                                    odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
//                                }
//                                //Limpiando Buffer de datos para dejar en vacio.
//                                buffer=new byte[ntamanoenvio];
//
//
//                            }
//                            lout.flush();
//                            //fout.flush();
//
//                            olog.outMensaje("caClientesCon.identificarFENIX:"+sdireccionipagenete+" FENIX Template TAMANO TOTAL LEIDO ->"+ntotalleido);
//                            olog.outMensaje("caClientesCon.identificarFENIX:"+sdireccionipagenete+" FENIX Template TAMANO TOTAL ESPERADO ->"+odatostemplate.getTamano(i));
//
//
//                        }
//                        
//                    }//Cierra el for
//
//                    //Ahora la parte de enviar a los AppBots
//                    
//                    String[] ssRespuesta= caservidor.getAppsBots().ejecutaIDENTIFICACION(odatostemplate);
//                    String scadenaenvio= "FENIX-Identificar RESPUESTA";
//                    
//                    
//                    for(int x =0; x<ssRespuesta.length; x++)
//                    {
//                        scadenaenvio+=ssRespuesta[x];
//                        
//                    }
//                    
//                    //lout.println("FENIX-Identificar RESPUESTA|1000029292|1299292012|292920293");
//                    lout.println(scadenaenvio);
//                    
//                
//                //fout.close();
//                
//        } 
//        catch(Exception ex)
//        {
//           olog.outMensaje("caClientesCon.identificarFENIX(): ERROR:"+ex.getMessage()); 
//        }
    }
    
    /***
     * Funcion de verificacion FENIX, esta funcion e=procesa la solicitud
     * de un cliente para la verificaicion
     * esta incluida en aDIRECTOR
     */    
    protected synchronized void verificarFENIX() 
    {
        //Strail 23dic2011
        try {
            
            if(solicitudesrespuestasFENIX("verificarFENIX","FENIX-Verificar")>0)
            {

                String[] ssRespuesta= caservidor.getAppsBots().ejecutaVERIFICACION(odatostemplate);
                String scadenaenvio= "FENIX-Verificar RESPUESTA";


                for(int x =0; x<ssRespuesta.length; x++)
                {
                    scadenaenvio+=ssRespuesta[x];

                }

                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
                lout.println(scadenaenvio);
            }
                
        }
        catch(Exception exx)
        {
           olog.outMensaje("caClientesCon.verificarFENIX(): ERROR:"+exx.getMessage()); 
        }
        return;
        //        
        
//        InputStream sis;
//        //String stmp="";
//        try {
//                sis = puerto.getInputStream();
//
//                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
//                for(int i=0;i<odatostemplate.getNumTemplates();i++)
//                {
//                    byte[] buffer=new byte[ntamanoenvio];
//                    int nread=0;
//                    long ntotalleido=0;
//
//
//                    if(odatostemplate.getTamano(i)>0)
//                    {
//                        lout.println("FENIX-Verificar OK");
//                        lout.flush();
//
//                        olog.outMensaje("caClientesCon.verificarFENIX():"+sdireccionipagenete+" Leyendo Template->");
//                        int nlen=0;
//                        String soriginal="";
//                        long nprueba=0;
//
//                        while(((nread = sis.read(buffer))>0))
//                        {
//
//                            ntotalleido+=nread;
//                            if(ntotalleido>odatostemplate.getTamano(i))
//                            {
//                                nread=nread-(int)(ntotalleido-odatostemplate.getTamano(i));
//                                odatostemplate.getTemplate()[i].agregaDatosTemplate(buffer);
//                                //fout.write(buffer,0,nread);
//                                //scadenaperdida=stmp.substring(nread+1);
//                                //fout.flush();
//                                lout.println("FENIX-Verificar TRANSMISIONok");
//
//                                break;
//                            }
//                            else if(ntotalleido==odatostemplate.getTamano(i))
//                            {
//                                byte[] btmp = new byte[nread];
//                                System.arraycopy(buffer, 0, btmp, 0, btmp.length);
//                                odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
//                                lout.println("FENIX-Verificar TRANSMISIONok");
//                                break;
//                            }
//                            else
//                            {
//                                //stmp=new String(buffer,"UTF8");
//                                //fout.write(buffer,0,nread);
//                                byte[] btmp = new byte[nread];
//                                System.arraycopy(buffer, 0, btmp, 0, btmp.length);
//                                odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
//                            }
//                            //Limpiando Buffer de datos para dejar en vacio.
//                            buffer=new byte[ntamanoenvio];
//
//
//                        }
//                        lout.flush();
//                        //fout.flush();
//
//                        olog.outMensaje("caClientesCon.verificarFENIX():"+sdireccionipagenete+" FENIX Template TAMANO TOTAL LEIDO ->"+ntotalleido);
//                        olog.outMensaje("caClientesCon.verificarFENIX():"+sdireccionipagenete+" FENIX Template TAMANO TOTAL ESPERADO ->"+odatostemplate.getTamano(i));
//                    }
//                    
//                }//CIERRA FOR
//                    //Ahora la parte de enviar a los AppBots
//                    
//                    String[] ssRespuesta= caservidor.getAppsBots().ejecutaVERIFICACION(odatostemplate);
//                    String scadenaenvio= "FENIX-Verificar RESPUESTA";
//                    
//                    
//                    for(int x =0; x<ssRespuesta.length; x++)
//                    {
//                        scadenaenvio+=ssRespuesta[x];
//                        
//                    }
//                    
//                    //lout.println("FENIX-Identificar RESPUESTA|1000029292|1299292012|292920293");
//                    lout.println(scadenaenvio);
//                    
//                    
//                
//                //fout.close();
//                
//        } 
//        catch(Exception ex)
//        {
//           olog.outMensaje("caClientesCon.verificarFENIX(): ERROR:"+ex.getMessage()); 
//        }
    }


    protected synchronized void insertarFENIX()
    {
        //Strail 23dic2011
        try {
            
            if(solicitudesrespuestasFENIX("insertarFENIX","FENIX-Insertar")>0)
            {

                String[] ssRespuesta= caservidor.getAppsBots().ejecutaINSERTAR(odatostemplate);
                String scadenaenvio= "FENIX-Insertar RESPUESTA";


                for(int x =0; x<ssRespuesta.length; x++)
                {
                    scadenaenvio+=ssRespuesta[x];

                }

                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
                lout.println(scadenaenvio);
            }
                
        }
        catch(Exception exx)
        {
           olog.outMensaje("caClientesCon.insertarFENIX(): ERROR:"+exx.getMessage()); 
        }
        return;
        //          
//        InputStream sis;
//        //String stmp="";
//        try {
//                sis = puerto.getInputStream();
//
//                PrintWriter lout = new PrintWriter(puerto.getOutputStream(), true);
//
//                for(int i=0;i<odatostemplate.getNumTemplates();i++)
//                {
//                    byte[] buffer=new byte[ntamanoenvio];
//                    int nread=0;
//                    long ntotalleido=0;
//
//
//                    if(odatostemplate.getTamano(i)>0)
//                    {
//                        lout.println("FENIX-Insertar OK");
//                        lout.flush();
//
//                        olog.outMensaje("caClientesCon.insertarFENIX():"+sdireccionipagenete+" Leyendo Template->");
//                        int nlen=0;
//                        String soriginal="";
//                        long nprueba=0;
//
//                        while(((nread = sis.read(buffer))>0))
//                        {
//
//                            ntotalleido+=nread;
//                            if(ntotalleido>odatostemplate.getTamano(i))
//                            {
//                                nread=nread-(int)(ntotalleido-odatostemplate.getTamano(i));
//                                odatostemplate.getTemplate()[i].agregaDatosTemplate(buffer);
//                                //fout.write(buffer,0,nread);
//                                //scadenaperdida=stmp.substring(nread+1);
//                                //fout.flush();
//                                lout.println("FENIX-Insertar TRANSMISIONok");
//
//                                break;
//                            }
//                            else if(ntotalleido==odatostemplate.getTamano(i))
//                            {
//                                byte[] btmp = new byte[nread];
//                                System.arraycopy(buffer, 0, btmp, 0, btmp.length);
//                                odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
//                                lout.println("FENIX-Insertar TRANSMISIONok");
//                                break;
//                            }
//                            else
//                            {
//                                //stmp=new String(buffer,"UTF8");
//                                //fout.write(buffer,0,nread);
//                                byte[] btmp = new byte[nread];
//                                System.arraycopy(buffer, 0, btmp, 0, btmp.length);
//                                odatostemplate.getTemplate()[i].agregaDatosTemplate(btmp);
//                            }
//                            //Limpiando Buffer de datos para dejar en vacio.
//                            buffer=new byte[ntamanoenvio];
//
//
//                        }
//                        lout.flush();
//                        //fout.flush();
//
//                        olog.outMensaje("caClientesCon.insertarFENIX():"+sdireccionipagenete+" FENIX Template TAMANO TOTAL LEIDO ->"+ntotalleido);
//                        olog.outMensaje("caClientesCon.insertarFENIX():"+sdireccionipagenete+" FENIX Template TAMANO TOTAL ESPERADO ->"+odatostemplate.getTamano(i));
//                    }
//                    
//                }//CIERRA FOR
//                    //Ahora la parte de enviar a los AppBots
//
//                    String[] ssRespuesta= caservidor.getAppsBots().ejecutaINSERTAR(odatostemplate);
//                    String scadenaenvio= "FENIX-Insertar RESPUESTA";
//
//
//                    for(int x =0; x<ssRespuesta.length; x++)
//                    {
//                        scadenaenvio+=ssRespuesta[x];
//
//                    }
//
//                    //lout.println("FENIX-Identificar RESPUESTA|1000029292|1299292012|292920293");
//                    lout.println(scadenaenvio);
//
//
//                
//                //fout.close();
//
//        }
//        catch(Exception ex)
//        {
//           olog.outMensaje("caClientesCon.verificarFENIX(): ERROR:"+ex.getMessage());
//        }
    }
}
